#ifndef APP_H
#define APP_H

#include "capi/cef_app_capi.h"
#include "capi/cef_browser_process_handler_capi.h"
#include "capi/views/cef_browser_view_capi.h"
#include "capi/views/cef_window_capi.h"
#include "logger.h"


extern int is_initialized;

// cef_app_t cef_browser_process_handler_t 管理对象
typedef struct _browser_app {
    cef_app_t cef_app;
    cef_browser_process_handler_t browser_process_handler;
} browser_app;

// cef_app_t 回调实现------------------------------------------------------------
// -----------------------------------------------------------------------------

// 作用: 在CEF和Chromium处理命令行参数之前，提供修改或查看这些参数的机会。
// 参数:
// self: 指向 cef_app_t 结构体的指针。
// process_type: 表示进程类型的字符串（例如，"browser"、"renderer" 等）。对于浏览器进程，这个值为 NULL。
// command_line: 指向 cef_command_line_t 结构体的指针，表示命令行参数。
// 注意事项: 不要保留对 command_line 对象的引用。修改非浏览器进程的命令行参数可能会导致未定义行为或崩溃。
void CEF_CALLBACK on_before_command_line_processing(struct _cef_app_t* self, const cef_string_t* process_type,
        struct _cef_command_line_t* command_line);

// 作用: 提供注册自定义URL方案（scheme）的机会。
// 参数:
// self: 指向 cef_app_t 结构体的指针。
// registrar: 指向 cef_scheme_registrar_t 结构体的指针，用于注册自定义方案。
// 注意事项: 不要保留对 registrar 对象的引用。这个函数在每个进程的主线程上调用，所有进程中注册的方案应该一致。
void CEF_CALLBACK on_register_custom_schemes(struct _cef_app_t* self, struct _cef_scheme_registrar_t* registrar);

// 作用: 返回处理资源包事件的处理器。如果 CefSettings.pack_loading_disabled 为 true，则必须返回一个处理器。
// 参数:
// self: 指向 cef_app_t 结构体的指针。
// 返回值: 返回一个指向 cef_resource_bundle_handler_t 结构体的指针，表示资源包处理器。如果返回 NULL，资源将从包文件中加载。
// 注意事项: 这个函数在浏览器和渲染进程的多个线程上调用。
struct _cef_resource_bundle_handler_t* CEF_CALLBACK get_resource_bundle_handler(struct _cef_app_t* self);

// 作用: 返回处理浏览器进程特定功能的处理器。
// 参数:
// self: 指向 cef_app_t 结构体的指针。
// 返回值: 返回一个指向 cef_browser_process_handler_t 结构体的指针，表示浏览器进程处理器。
// 注意事项: 这个函数在浏览器进程的多个线程上调用
struct _cef_browser_process_handler_t* CEF_CALLBACK get_browser_process_handler(struct _cef_app_t* self);

// 作用: 返回处理渲染进程特定功能的处理器。
// 参数:
// self: 指向 cef_app_t 结构体的指针。
// 返回值: 返回一个指向 cef_render_process_handler_t 结构体的指针，表示渲染进程处理器。
// 注意事项: 这个函数在渲染进程的主线程上调用。
// struct _cef_render_process_handler_t* CEF_CALLBACK get_render_process_handler(struct _cef_app_t* self);

// cef_app_t 回调实现------------------------------------------------------------
// -----------------------------------------------------------------------------
void CEF_CALLBACK on_context_initialized(struct _cef_browser_process_handler_t* self);


browser_app* browser_app_create_t();







#endif